Streaming distribution of live and on-demand audio and/or video over the Internet is challenging due to the dynamic nature of various elements utilized in the delivering and rendering of content. Traditionally, users would have to select a specific bitrate to match their expected download speeds, or would allow an automated detection system to select the appropriate bitrate. However, bandwidth conditions change dynamically, and bandwidth availability may drop dramatically over the course of a sustained connection. To compensate for such changes, a user may consider selecting the lowest offered bitrate for a given piece of content, in consideration of the likelihood that network conditions will deteriorate from a peak at the beginning of the connection.
The market penetration of High Definition (HD) media delivery has suffered from this phenomenon, as it is not typical that an end user will have sufficient bandwidth to sustain a bitrate for transmission of an entire HD-quality media stream that is longer than a few minutes. Additionally, scaling delivery of HD content to serve ever-increasing numbers of users is difficult as the high quality of the content also consumes server bandwidth. This higher server bandwidth increases server costs, especially when attempting to preserve guaranteed quality of service metrics.
While multiple solutions exist that attempt to solve problems in providing large quantities of HD-quality media over the Internet, these existing solutions all have drawbacks. One such solution purportedly allows storing a single media presentation in multiple different bitrates, and indexing each version to allow smooth switching between versions. This solution continues to use a centralized download source, which does not scale well and may result in “bottlenecking” problems as described above. For these and other reasons, the centralized download source may become unavailable or otherwise inaccessible. Moreover, this solution does not take advantage of the fact that fragments may be cached and more readily available from other client/server devices that, for example, recently accessed the media.
Peer-to-peer solutions for providing massive media download capabilities have also emerged. However, these existing solutions are not well suited for providing streaming of live content. Generally, such solutions break the content into fragments which are distributed among multiple peer systems. When a client downloads a file from the peer-to-peer network using these existing technologies, it may not take into account the order of the fragments requested, which makes it difficult or impossible to access the media in a way that allows for real-time streaming and presentation. Another problem with existing peer-to-peer solutions is that they generally require installation of stand-alone client software on each peer. End users are increasingly wary of installing native executables from untrusted sources. As such, requiring such client software to be installed will decrease the popularity of any peer-to-peer system.
Even more problems arise when attempting to increase acceptance by building a peer-to-peer distribution system to run within a generic host application such as a web browser. Web browsers allow rich application content to be executed without installing additional software on the local system. However, web browsers typically segregate access to local resources based on domains. In other words, when a web application is connected to the “foo.com” domain, the web application is only able to access local storage related to the “foo.com” domain. Once the web browser is directed to a different domain, the local content from the “foo.com” domain is inaccessible. Hence, the number of peers in a peer-to-peer distribution system is limited to peers who are currently accessing the same domain, and these peers will be unavailable when users navigate away from that domain. Further, web browsers can allow more than a single copy of a web site to be viewed at a single time. This means that a peer-to-peer application running on such a web site would either run into collisions when both copies attempt to open the same client port, or that each copy would select a different port, and could not be located by peers attempting to connect to a well-known peer client port. Existing peer-to-peer distribution systems are not currently able to operate with such high unpredictability in peer availability and contact information.